
#include <Arduino.h>

#ifndef __PS2_CLIENT_H__
#define __PS2_CLIENT_H__

class PS2_Client {
  private:
    int pin_clk;
    int pin_d;

    unsigned char PS2_TXBuffer[256]; // 发送数据缓冲
    unsigned char PS2_TX_S;          // 发送缓冲开始位置
    unsigned char PS2_TX_E;          // 发送缓冲结束位置
    unsigned char PS2_TXByte;        // 正在发送的字节
  protected:
    // 发送一位
    uint8_t send_bit(uint8_t bit);
    // 读取一位
    uint8_t read_bit(uint8_t *bit);
    // 发送一个字节
    uint8_t sendByte(uint8_t data);
    // 写缓存
    void writeBuffer(uint8_t data);
    // 清空缓存
    void clearTXBuffer();

    void setDefault(void);        // 复位设备
    void sendData(void);          // 将缓存中的数据发送出去
    int readData(uint8_t &buf);   // 接收数据到缓存
    bool executeCmd(uint8_t cmd); // 检查收到的指令，并对应

    virtual void checkChange(void) = 0; // 检查变更状态，产生数据写到缓冲区

  public:
    PS2_Client(int clk, int d);
    void execute();
};

#endif